search: Catch async function errors and log them unless cancelled
In case a search function fails, we are not providing clear errors, thus
trace the errors when calling async functions from sync ones and when
catching errors.
Note that at the moment is unlikely to receive any cancelled error here,
since the remote search providers calls handle the error already, but we
still use `logErrorUnlessCancelled` instead of `logError` to be more future
proof or to cover the case in which some extension may throw a cancelled
error.